package ma.moliere.presentation.controleur;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.faces.model.SelectItem;

import ma.moliere.domaine.IEleveDomaine;
import ma.moliere.domaine.IParametrage;
import ma.moliere.persistance.oe.Enseignant;
import ma.moliere.presentation.modele.ParametrageModele;
import ma.moliere.transverse.vo.ClasseAffichee;

public class GestionParametrageControleur implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -3291338578644280433L;
	private ParametrageModele modele;
	private IParametrage parametrageDomaine;
	private IEleveDomaine eleve;

	public ParametrageModele getModele() {
		return modele;
	}

	public void setModele(final ParametrageModele modele) {
		this.modele = modele;
	}

	public IParametrage getParametrageDomaine() {
		return parametrageDomaine;
	}

	public void setParametrageDomaine(final IParametrage parametrageDomaine) {
		this.parametrageDomaine = parametrageDomaine;
	}

	public IEleveDomaine getEleve() {
		return eleve;
	}

	public void setEleve(final IEleveDomaine eleve) {
		this.eleve = eleve;
	}

	// Classes
	public String afficherClasses() {
		getModele().setClasse(null);
		getModele().getClasses().clear();
		getModele().getClasses().addAll(parametrageDomaine.rechercherClasses());
		return "ECR_CLASSES";
	}

	/** Affichage de l'ecran dde gestion des tarifs. */
	public String afficherTarifs() {
		chargerClasses();
		getModele().setTarif(null);
		getModele().getTarifs().clear();
		getModele().getTarifs().addAll(parametrageDomaine.rechercherTarifs());
		return "ECR_TARIFS";
	}

	public String ajouterClasse() {

		parametrageDomaine.ajouterClasse(getModele().getClasse());
		return afficherClasses();
	}

	public String ajouterTarif() {
		getModele().getTarif().setEtat("CREE");
		parametrageDomaine.ajouter(getModele().getTarif());
		return afficherTarifs();
	}

	public String modifierTarif() {
		parametrageDomaine.modifier(getModele().getTarif());
		return afficherTarifs();
	}

	public String validerTarif() {
		getModele().getTarif().setEtat("VALIDE");
		parametrageDomaine.modifier(getModele().getTarif());
		return afficherTarifs();
	}

	public String cloturerTarif() {
		getModele().getTarif().setDatefin(Calendar.getInstance().getTime());
		getModele().getTarif().setEtat("CLOTURE");
		parametrageDomaine.modifier(getModele().getTarif());
		return afficherTarifs();
	}

	public String modifierClasse() {
		parametrageDomaine.modifierClasse(getModele().getClasse());
		return afficherClasses();
	}

	public String supprimerClasse() {
		// parametrageDomaine.supprimerClasse(getModele().getClasse().getId());
		return afficherClasses();
	}

	// Modules
	public String afficherModules() {
		// getModele().setModule(null);
		// getModele().getModules().clear();
		getModele().getClassesItems().clear();
		List < ClasseAffichee > classes = new ArrayList < ClasseAffichee >();
		List < Enseignant > enseignants = new ArrayList < Enseignant >();
		classes = parametrageDomaine.rechercherClasses();
		enseignants = parametrageDomaine.rechercherEnseignants();
		// chargement des classes
		if (classes != null && !classes.isEmpty()) {
			SelectItem item = null;
			for (ClasseAffichee classe : classes) {
				item = new SelectItem();
				item.setLabel(classe.getLibelle());
				item.setValue(classe.getId());
				getModele().getClassesItems().add(item);
			}
		}
		if (enseignants != null && !enseignants.isEmpty()) {
			SelectItem item = null;
			for (Enseignant enseignant : enseignants) {
				item = new SelectItem();
				item.setLabel(enseignant.getPrenom().concat(" ").concat(enseignant.getNom()));
				item.setValue(enseignant.getId());
				getModele().getEnseignantItems().add(item);
			}
		}
		// getModele().getModules().addAll(parametrageDomaine.rechercherModules());
		return "ECR_MODULES";
	}

	public String ajouterModule() {
		// parametrageDomaine.ajouterModule(getModele().getModule());
		return afficherModules();
	}

	public String modifierModule() {
		// parametrageDomaine.modifierModule(getModele().getModule());
		return afficherModules();
	}

	public String supprimerModule() {
		// parametrageDomaine.supprimerModule(getModele().getModule().getId());
		return afficherModules();
	}

	// Gestion enseignant
	public String afficherEnseignants() {
		getModele().setEnseignant(null);
		getModele().getEnseignants().clear();
		getModele().getEnseignants().addAll(parametrageDomaine.rechercherEnseignants());
		return "ECR_ENSEIGNANTS";
	}

	public String ajouterEnseignant() {
		parametrageDomaine.ajouterEnseignant(getModele().getEnseignant());
		return afficherEnseignants();
	}

	public String modifierEnseignant() {
		parametrageDomaine.modifierEnseignant(getModele().getEnseignant());
		return afficherEnseignants();
	}

	public String supprimerEnseignant() {
		parametrageDomaine.supprimerEnseignant(getModele().getEnseignant().getId());
		return afficherEnseignants();
	}

	public String afficherPanelModificationClasse() {

		return null;
	}

	public void chargerClasses() {
		getModele().getClassesItems().clear();
		// chargement des années scolaire et des classes

		List < ClasseAffichee > classes = new ArrayList < ClasseAffichee >();
		classes = parametrageDomaine.rechercherClasses();

		// chargement des classes
		if (classes != null && !classes.isEmpty()) {
			SelectItem item = null;
			for (ClasseAffichee classe : classes) {
				item = new SelectItem();
				item.setLabel(classe.getLibelle());
				item.setValue(classe.getLibelle());
				getModele().getClassesItems().add(item);
			}
		} else {
			// Ajouter message d'erreur.
			// rester sur la meme page
		}
	}

}
